package day0614;

//引入  文件夹.JFrame文件;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

public class ZY2 {
    public static void main(String[] args) {
        //1.定义一个变量w指代一个 新建的窗口(用JFrame文件);
        // (默认是隐藏，默认是最小, 默认关不掉)
        JFrame w=new JFrame();
        //3.用JPanel文件床架一个面板对象，存入到变量JPanel p中(用来承载界面上的所有元素)
        JPanel p=new JPanel();

        //9.Layout布局//将默认的布局方式设置为空(没有布局方式了<通过xy坐标给给每个元素设置位置>)
        p.setLayout(null);//set设置，

        //4.用ImageIcon文件创建一个ImageIcon对象存入bg变量中，用来操作"images/背景.jpg"
        ImageIcon bg=new ImageIcon("images/背景.jpg");
        //5.用JLabel文件创建一个对象存入j变量中(表示标签，用来包含背景图)
        JLabel  j=new JLabel();
        //10.给包含背景图的标签设置宽高和坐标
        j.setSize(480,800);//给标签设置宽480,高800);
        j.setLocation(0,0);//给标签设置坐标点为，0,0, Location: 位置  (xy坐标)
        //6.将bg变量指代的背景图设置到标签j中(给标签j设置图片bg//让标签包含图片bg)
        j.setIcon(bg);//给标签j设置图片bg//让标签包含图片bg
        //7.将j变量指代的包含背景图的标签设置到面板p中(给面板p中添加标签j)
        p.add(j);//给面板p中添加标签j


        //11.创建所有的按钮的代码
        //11.1创建一个包含所有图片名字的String[] names数组
        String[] names={"刷子","剪刀","叉子","奶瓶","干草",
                "手套","树桩", "棉花","毛线","水桶",
                "火", "玉米", "白菜","草" , "萝卜","铃铛"};


        //11.2创建一个JButton类型的数组is,容量为96，用来存储下边双层for循环创建的96个按钮
        JButton[]  is=new JButton[96];//用来存储下边双层for循环创建的96个按钮
        //外循环执行0---5次 (6次)， 表示将names.length种按钮创建6遍  (总共6*names.length)
        for(int i=0;i<6;i++){//6*16=96
            //内循环执行names次，表示创建names.length(16)种按钮
            for(int b=0; b<names.length; b++) {
                //创建一个ImageIcon对象存入到 ImageIcon b1Icon变量中
                // 用来操作("images/"+names[b] + ".png"图片
                ImageIcon b1Name = new ImageIcon("images/"+names[b] + ".png");
                //创建一个JButton对象存入到 JButton b1变量中(表示本次循环创建一个一个按钮)
                JButton b1 = new JButton();
                //给按钮设置宽59, 高66
                b1.setSize(59,66);
                //给按钮b1设置图标为b1Icon
                b1.setIcon(b1Name);
                b1.setName(names[b]);
                //将按钮b1存入到is数组的i*16+b位置
                is[i*16+b]=b1;
            }
        }

        //13.打乱96个按钮的顺序
        Random  rd=new Random();//创建一个随机数工具对象存入到变量Random rd中
        for(int i=0;i<is.length;i++){//循环从0开始到is.length-1结束(执行is.length次)，用于给is.length多个元素打乱顺序
            int num=rd.nextInt(96);//用rd的nextInt()方法产生一个小于96的随机整数存入到num变量中
            //用is[i]元素和is[随机数num]元素交换的三行代码如下：
            JButton t=is[i];//从is取出第i个元素存入到JButton t变量中
            is[i]=is[num];//将is[num]的值赋值给is[i]
            is[num]=t;//将变量t中存储的按钮赋值给is[num]
        }





        //12.第一层按钮
        for(int i=0;i<42;i++){//此for循环从0开始循环到41结束(执行42次)，用于从is数组中取出42个按钮
            JButton b=is[i];//从is数组中取出一个按钮is[i]存入到变量JButton b(放到界面上)
            int x=30+i%7*59;//int x=30+i%7*59;//计算此按钮的x坐标//59是按钮宽度
            int y=100+i/7*66;//int y=100+i/7*66;//计算此按钮的y坐标//66是按钮宽度
            b.setLocation(x,y);//将xy坐标设置给按钮b
            p.add(b,0);//将按钮b添加到面板p的第0层
        }






        //12.第二层按钮
        for(int i=42;i<72; i++){//此for循环从42开始循环到71结束(执行30次)，用于从is数组中取出30个按钮
            JButton b=is[i];//从is数组中取出一个按钮is[i]存入到变量JButton b(放到界面上)
            int x=60+(i-42)%6*59;//int x=60+(i-42)%6*59;//计算此按钮的x坐标//59是按钮宽度
            int y=133+(i-42)/6*66;//int y=133+(i-42)/6*66;//int y=100+i/7*66;//计算此按钮的y坐标//66是按钮宽度
            b.setLocation(x,y);//将xy坐标设置给按钮b
            p.add(b,0);//将按钮b添加到面板p的第0层
        }


        //12.第三层按钮
        for(int i=72;i<96; i++){//第二层： 4行6列
            //从is数组中取出一个按钮(放到界面上)
            JButton b=is[i];
            int x=55+(i-72)%6*59;//59是按钮宽度
            int y=166+(i-72)/6*66;//66是按钮宽度
            b.setLocation(x,y);
            p.add(b,0);
        }


        for(int i=0; i<is.length-2 ;i++){//此for循环从0循环到is.length-2 用来获取当前元素 is[i](判断is[i]是否被覆盖)
            for(int n=i+1;  n<is.length; n++){//此for循环变量n从n+1循环到is.length-1 用来判断is[n]是否覆盖了is[i]按钮
                //注：内层for循环用来获取当前元素后边的所有元素(is[i+1]到is[is.length-1]之间的所有按钮)
                //is[n]覆盖is[i]时的左边线(is[n]在最左侧处覆盖is[i]的x坐标值)
                int x1=is[i].getX()- is[n].getWidth();
                //is[n]覆盖is[i]时的右边线(is[n]在最右侧处覆盖is[i]的x坐标值)
                int x2=is[i].getX()+ is[n].getWidth();
                //is[n]覆盖is[i]时的上边线(is[n]在最上侧处覆盖is[i]的y坐标值)
                int y1=is[i].getY()- is[n].getHeight();
                //is[n]覆盖is[i]时的下边线(is[n]在最下侧处覆盖is[i]的y坐标值)
                int y2=is[i].getY()+ is[n].getHeight();
                if(x1<is[n].getX()&&is[n].getX()<x2 && y1<is[n].getY()&&is[n].getY()<y2){
                    is[i].setEnabled(false);//用setEnabled(false);将按钮is[i]  //注： set 设置  enable是否可用
                }

            }
        }





        ArrayList<JButton> cards = new ArrayList<>();
        for (int i=0 ;i< is.length; i++){
            JButton card = is[i];
            int i2=i;
            //给当前获取到的按钮添加一个点击监听
            card.addActionListener(

                    //第141到144行  (e可以用来获取点击的按钮的一些信息 )
                    e -> {
                        JButton selected = (JButton) e.getSource();//用e获取点击的按钮
                        System.out.println("点击：" + selected.getName());//打印按钮的名字
                        /*System.out.println(is[i2]);
                        for (int m = i2 + 1; m < is.length - 1; m++) {
                            is[m] = is[m + 1];
                        }
                        is = Arrays.copyOf(is, is.length - 1);*/
                        for (int m = i2 + 1; m < is.length - 1; m++) {
                            is[m] = is[m + 1];
                        }


                    }

            );
        }




        //8.将面板p添加到窗口w中(窗口包含面板)
        w.add(p);

        //2.设置窗口属性
        w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认Default  关闭Close  操作Operation
        w.setSize(480,800);//设置窗口w的尺寸(宽，高)
        w.setVisible(true);//设置w代表的窗口显示(出来), true代表显示// Visible:显示
    }
}